//1.属性接口   对json的约束

//ts中定义方法
/*
function printLabel(){
    console.log('printLabel')
}
printLabel()
*/

//ts中定义方法传入参数

// function printLabel(label: string) {
//     console.log(label)
// }
// printLabel('哈哈哈哈哈')


/*
    ts中自定义方法传入参数对 json的约束
*/

    // function printLabel(labeledObj: { label: string }) {
    //     console.log(labeledObj.label)
    // }
    // let myObj = { size: 10, label: 'Size 10 Object' };
    // printLabel(myObj)

    // printLabel('hahahhaha') //错误的写法
    // printLabel({ name: '张三' }); //错误的写法

    // printLabel({ label: '张三' }) //正确的写法




//接口： 行为和动作的规范，对批量方法进行约束

// interface FullName{
//     firstName: string;  //注意;结束
//     secondName: string;
// }
// function printName(name:FullName) {
//     //必须传入对象  firstName secondName
//     console.log(name.firstName +'--'+ name.secondName)
// }
// // printName('123')    //错误的写法
// var obj = { //传入的参数必须包含 firstName 和 secondName
//     age: 20,
//     firstName: '张',
//     secondName: '三'
// }
// printName(obj)




//对批量方法进行约束

/*
    interface FullName{
        firstName: string;  //注意;结束
        secondName: string;
    }
    function printName(name:FullName) {
        //必须传入对象  firstName secondName
        console.log(name.firstName +'--'+ name.secondName)
    }
    function printInfo(info: FullName) {
        console.log(info.firstName + info.secondName)
    }
    // printName('123')    //错误的写法
    var obj = { //传入的参数必须包含 firstName 和 secondName
        age: 20,
        firstName: '张',
        secondName: '三'
    }
    printName(obj)

    var info = { //传入的参数必须包含 firstName 和 secondName
        age: 20,
        firstName: '李',
        secondName: '四'
    }
    printName(info)
*/

//接口： 可选属性
    /*
        interface FullName{
            firstName: string;
            secondName?: string;
        }
        function getName(name: FullName) {
            console.log(name)
        }
        getName({
            firstName: 'zhang'
        })
    */
//原生js封装Ajax
interface Config{
    type: string;
    url: string;
    data?: string;
    dataType: string;
}
function ajax(config: Config) {
    var xhr = new XMLHttpRequest();
    xhr.open(config.type, config.url, true)
    xhr.send(config.data)
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            console.log('成功')
            if (config.dataType === 'json') {
                JSON.parse(xhr.responseText)
            } else {
                console.log(xhr.responseText)
            }
        }        
    }
}

ajax({
    type: 'get',
    data: 'name=zhangsan',
    url: 'http://a.itying.com/api/productlist',
    dataType: 'json'
})